package util.manager;

public class PageManager {
	private int rowPerPage;
	private int pagePerGroup;
	private int totalRow;
	private int currPage=1;
	
	/**
	 * @param rowPerPage 한 페이지 당 나오는 줄 수
	 * @param pagePerGroup 한 그룹 당 나오는 페이지 수
	 * @param totalRow 목록의 모든 줄 수
	 * @param currPage 현재 페이지
	 */
	public PageManager(int rowPerPage, int pagePerGroup, int totalRow, int currPage) {
		this.rowPerPage = rowPerPage;
		this.pagePerGroup = pagePerGroup;
		this.totalRow = totalRow;
		this.currPage = currPage;
	}

	/**
	 * 한 페이지 당 나오는 줄 수
	 * @return
	 */
	public int getRowPerPage() {
		return rowPerPage;
	}

	/**
	 * 한 그룹 당 나오는 페이지 수
	 * @return
	 */
	public int getPagePerGroup() {
		return pagePerGroup;
	}

	/**
	 * 목록의 모든 줄 수
	 * @return
	 */
	public int getTotalRow() {
		return totalRow;
	}
	
	/**
	 * 현재 페이지
	 * @return
	 */
	public int getCurrPage(){
		return currPage;
	}
	
	/**
	 * 총 페이지 수
	 * @return
	 */
	public int getTotalPage(){
		int remainder=totalRow%rowPerPage;
		if(remainder==0){
			if(totalRow==0){
				return 1;
			}
			return totalRow/rowPerPage;
		}
		else
			return totalRow/rowPerPage+1;
	}
	
	/**
	 * 총 그룹 수
	 * @return
	 */
	public int getTotalGroup(){
		int remainder=getTotalPage()%pagePerGroup;
		if(remainder==0)
			return getTotalPage()/pagePerGroup;
		else
			return getTotalPage()/pagePerGroup+1;
	}
	
	/**
	 * 현재 그룹
	 * @return
	 */
	public int getCurrGroup(){
		int remainder=currPage%pagePerGroup;
		if(remainder==0)
			return currPage/pagePerGroup;
		else
			return currPage/pagePerGroup+1;
	}
	
	/**
	 * 현재 그룹의 첫 페이지
	 * @return
	 */
	public int getFirstPageInCurrGroup(){
		return (getCurrGroup()-1)*pagePerGroup+1;
	}
	
	/**
	 * 현재 그룹의 마지막 페이지
	 * @return
	 */
	public int getLastPageInCurrGroup(){
		int lastPage=getCurrGroup()*pagePerGroup;
		if(lastPage>getTotalPage())
			return getTotalPage();
		else
			return lastPage;
	}
	
	/**
	 * 이전 그룹의 존재 여부
	 * @return
	 */
	public boolean isExistOfPreviousGroup(){
		if(getCurrGroup()>1)
			return true;
		else
			return false;
	}
	
	/**
	 * 다음 그룹의 존재 여부
	 * @return
	 */
	public boolean isExistOfNextGroup(){
		if(getCurrGroup()<getTotalGroup())
			return true;
		else
			return false;
	}
}
